BiasAddGrad

计算 BiasAdd 对偏置的梯度:将上游梯度 input``(NHWC)沿 N、H、W 求和,得到通道维偏置梯度 ``output

\[\mathrm{output}_c = \sum_{n,h,w} \mathrm{input}(n,h,w,c)\]

其中 \(c\) 为通道下标,通道数取 dims[shape_size - 1]

输入:
  • input - 上游梯度地址(NHWC)

  • dims - 维度数组,如 [N, H, W, C]

  • shape_size - 维数(测试常用 4)

  • core_mask - 核掩码(仅共享存储版本)

输出:
  • output - 偏置梯度地址,长度为通道数 C;调用前通常先清零

支持平台:

FT78NE MT7004

备注

  • FT78NE 支持 fp32

  • MT7004 支持 fp16、fp32

  • 布局按 NHWC:最后一维为通道;无 data_format 参数

  • 参数顺序:input, output, dims, shape_size

共享存储版本:

void hp_bias_add_grad_s(float16 *input, float16 *output, int *dims, int shape_size, int core_mask)
void fp_bias_add_grad_s(float *input, float *output, int *dims, int shape_size, int core_mask)

C调用示例:

 1// MT7004 示例(共享存储多核,DDR 地址,NHWC)
 2void TestBiasAddGradSMCFp32(int core_mask) {
 3    int core_id = get_core_id();
 4    int logic_core_id = GetLogicCoreId(core_mask, core_id);
 5    int core_num = GetCoreNum(core_mask);
 6    float *input = (float *)0x81000000;
 7    float *output = (float *)0x82000000;
 8    int dims[4] = {1, 4, 4, 16}; /* N, H, W, C */
 9    sys_bar(0, core_num);
10    fp_bias_add_grad_s(input, output, dims, 4, core_mask);
11}
12
13void main() {
14    int core_mask = 0b1111;
15    TestBiasAddGradSMCFp32(core_mask);
16}

私有存储版本:

void hp_bias_add_grad_p(float16 *input, float16 *output, int *dims, int shape_size)
void fp_bias_add_grad_p(float *input, float *output, int *dims, int shape_size)

C调用示例:

 1// MT7004 示例(私有存储单核,AM 地址,NHWC)
 2void TestBiasAddGradAMFp32(void) {
 3    float *input = (float *)0x10010000;
 4    float *output = (float *)0x10020000;
 5    int dims[4] = {1, 4, 4, 16}; /* N, H, W, C */
 6    fp_bias_add_grad_p(input, output, dims, 4);
 7}
 8
 9void main() {
10    TestBiasAddGradAMFp32();
11}